FILESOFT PDF SNAPSHOT HISTORY — 0.1.0
Editable teaching example · 30 October 2026

OPEN THIS FILE
Filesoft PDF Snapshot History_0.1.0.fmp12
Use FileMaker Pro 26 on macOS. If prompted, use Admin with an empty password.
Extract the ZIP into a writable folder before opening the file. Use one user
and one FileMaker window. This is an unlocked, independent teaching example.
It is not a Sales Starter feature or a production document archive.

The file starts empty. In Quote workspace, click Load example and confirm Load.
Do this again after reopening: it reloads saved data without deleting history.
The existing quote screen is retained. Click PDF history in its left sidebar
for the new PDF screen; Quote workspace returns you to quote selection/editing.

MAIN WALKTHROUGH
1. Load example. Click New quote, then Create. Expect Q-001 / r1, Draft, $100:
   two desk lamps at $40 and one desk mat at $20. Click Issue quote.
2. Click PDF history, then Save original PDF. Expect one saved PDF, linked to
   Q-001 / r1, PDF v1, $100.00, with a document ID and generation timestamp.
   Click Open saved PDF. Inspect the actual PDF: correct values, one page,
   readable text and full margins/footer, no clipping or unexpected blank page.
   Export saved PDF to a new folder/name. Keep this first export for comparison.
3. Return to Quote workspace. Keep Q-001 / r1 selected. Click Create revision
   and Continue. On the new draft, change the LAMP QUOTE LINE price to 42.
   Do not only change the catalogue. Click Save draft, then Issue quote.
   Expect Q-001 / r2, Issued, $104; the original r1 remains $100.
4. Open PDF history and click Save original PDF. Expect two saved PDFs:
   Q-001 / r1 / PDF v1 / $100.00 and Q-001 / r2 / PDF v1 / $104.00.
   Each quote revision has its own original PDF. Open the second and inspect it.
5. Select the FIRST PDF and click Open saved PDF. Expect the stored $100 original,
   even though the selected quote above is still the $104 revision. Its ID,
   timestamp, checksum and PDF count must remain unchanged. Export it under a
   different filename. Compare SHA-256 with the first export; they must match.
6. Close this FileMaker file, reopen, Load example, then PDF history. Select each
   saved PDF and open it again. The original must still be $100 and revision $104.
   Export the original again and compare it with your first export.

The quote's revision number and the PDF's version number are separate.
Create PDF version makes an additional PDF for the SAME issued quote revision.
Changing an agreed price requires a new quote revision, as in step 3.

ADDITIONAL TEST CHECKLIST — EXPECTATIONS FOR YOUR COPY
Record FileMaker Pro's exact version/build, macOS version, test ID and outcome.
Keep the normal walkthrough exports and screenshots before boundary testing.

PDF-01  Main walkthrough above: inspect both rendered pages and retrieve the
        unchanged original after revision and after closing/reopening.
PDF-02  Repeat Save original PDF on each selected issued quote. Expect reuse of
        that quote's original, no additional row and no ID/time/checksum change.
        Repeat Open saved PDF: no row added and the same PDF bytes retrieved.
PDF-03  Select an issued quote with an original PDF. Click Create PDF version,
        then Cancel. Nothing is created. Repeat and Create: exactly one additional
        PDF version with a new ID; earlier PDFs remain. A further confirmed Create
        deliberately adds another version; it is not a retry of the original.
PDF-04  With an issued quote selected, click Try rejected PDF, then Cancel:
        nothing changes. Repeat and Try. The example intentionally clears a
        required document key inside its storage transaction. Expect an error,
        unchanged PDF count, and all previous PDFs still opening correctly.
        Close/reopen and verify again. A normal Create PDF version should then
        succeed once. If the rejected operation saves a row, stop and report it.
PDF-05  Click Export saved PDF and cancel its save dialog. Expect no lost PDF or
        changed count. Export to a fresh filename and inspect it. Test a collision
        using only a disposable export: replacement must require an explicit
        choice. Test an unavailable/unwritable destination if practical; error or
        cancellation must preserve the stored original. Report silent overwrite.
PDF-06  On Quote workspace, select a draft and open PDF history. Save original PDF
        must refuse it. With unsaved quote/catalogue edits, navigation must ask
        you to save/discard, preserving entered values. Correct and retry.
PDF-07  Alternate selected quotes before saving their PDFs and alternate selected
        PDF rows before opening. Confirm source labels, quantities and totals match
        the intended records. Selecting an empty PDF row must give guidance.
PDF-08  In a separate test copy, use a long valid description (up to 80 characters),
        quantity 100 and price 99999.99. Save and issue, then save/open its PDF.
        Inspect all text and large amounts on the actual rendered page. Check
        Select labels, other controls, focus order and messages in FileMaker.
PDF-09  In a separate test copy, reach eight PDFs. New generation must be refused;
        selecting/opening prior PDFs and repeating Save original must still work.
        Quote workspace supports six quote records including revisions, two lines
        per quote and one currency, USD. There is no reset or deletion UI.

For an independent byte comparison, run macOS Terminal's shasum -a 256 on each
exported PDF (drag each file into Terminal to insert its path), or use a trusted
local checksum utility. Compare repeated exports of the SAME saved document;
independently generated PDF versions may differ because their metadata differs.
The displayed checksum alone is not a substitute for comparing exported bytes.

IMPLEMENTATION AND LIMITS
PDF content is embedded in Documents::Payload. Each document also stores its own
ID, source quote ID/revision label, PDF version, timestamp, filename, total and
SHA-256 digest. Opening retrieves the stored content and checks its digest; it
never calls PDF generation. The print layout uses captured saved quote values.
Save original reuses version 1 for that quote ID. Explicit additional versions
retain prior documents. PDF generation uses a hidden helper window and a temporary
file; completed content and document metadata are saved together in a transaction.
Temporary files can remain until FileMaker/macOS clears the temporary location,
including after a rejected storage operation. Do not use this file for sensitive
customer information. No automatic customer email or transmission is included.

The file is unlocked for learning. Full Access can modify fields, scripts or PDFs;
this is not a tamper-proof, signed or compliance archive. A checksum detects a
mismatch against the stored digest; it does not authenticate who created a PDF.
Issued protection is enforced through the teaching interface. Back up the complete
closed file to retain its embedded PDFs. Never filesystem-copy an open database.
No hosting, concurrent users, Go, WebDirect, Windows, earlier FileMaker versions,
tax, payments, signatures, attachments or production access control are covered.
The fixed desktop screen is 1280 x 920 logical points. The owner reviewed the illustrated one-page $100 and $104 PDFs and confirmed
reopening, repeat-original saving and rejected-save preservation. Other boundary
cases, resizing and error paths still need testing in your own environment.

REVIEW EVIDENCE
The owner supplied screenshots of the $100 original, separate $104 revision and
reopened $100 original, and confirmed that reopening preserves both PDFs, repeating
Save original keeps the count at two, and Try rejected PDF preserves both originals.
These are owner-reported native results on FileMaker Pro 26/macOS; the exact native
patch version was not recorded. An independent comparison of exported PDF bytes
has not been completed. The supplied empty file is the same generated database
that started the walkthrough, not a newly cloned database or the populated test file.
Use fictional data. Keep your own test results separate from this bounded evidence.

CLARIS REFERENCES
https://help.claris.com/en/pro-help/content/save-records-as-pdf.html
https://help.claris.com/en/pro-help/content/export-field-contents.html
https://help.claris.com/en/pro-help/content/container-fields.html
https://help.claris.com/en/pro-help/content/cryptdigest.html
